package com.tiger.statefulsb.sample4;

import java.util.Vector;

import javax.naming.InitialContext;

public class ShoppingCartBean implements javax.ejb.SessionBean {
	private javax.ejb.SessionContext sessionContext = null;
	private Vector itemNameList = null;
	private Vector itemPriceList = null;
	private int maxSize;

	public void setSessionContext(javax.ejb.SessionContext sessionContext) throws javax.ejb.EJBException, java.rmi.RemoteException {
		System.out.println("ShoppingCartBeanのsetSessionContextが呼ばれました");
		this.sessionContext = sessionContext;
	}

	// コンポーネントインターフェイスのcreate()メソッドに対応する
	public void ejbCreate() throws javax.ejb.CreateException {
		System.out.println("ShoppingCartBeanのejbCreateが呼ばれました");
		this.itemNameList = new Vector();
		this.itemPriceList = new Vector();

		try {
			// 環境エントリを使いデフォルトの最大商品数を取得する
			InitialContext ctx = new InitialContext();
			Integer val = (Integer) ctx.lookup("java:comp/env/defaultMaxSize");
			this.maxSize = val.intValue();
		} catch (javax.naming.NamingException e) {
			throw new javax.ejb.EJBException(e);
		}
	}

	// コンポーネントインターフェイスのcreate(int maxSize)メソッドに対応する
	public void ejbCreate(int maxSize) {
		System.out.println("ShoppingCartBeanのejbCreate(int maxSize)が呼ばれました");
		this.itemNameList = new Vector();
		this.itemPriceList = new Vector();
		this.maxSize = maxSize;
	}

	// コンポーネントインターフェイスのcreateWithSpecialPresents()メソッドに対応する
	public void ejbCreateWithSpecialPresents() {
		System.out.println("ShoppingCartBeanのejbCreateWithSpecialPresents()が呼ばれました");
		this.itemNameList = new Vector();
		this.itemPriceList = new Vector();

		try {
			// 環境エントリを使いデフォルトの最大商品数と特別プレゼント商品を取得する
			InitialContext ctx = new InitialContext();
			Integer val1 = (Integer) ctx.lookup("java:comp/env/defaultMaxSize");
			this.maxSize = val1.intValue();
			String val2 = (String) ctx.lookup("java:comp/env/specialPresent");
			this.itemNameList.addElement(val2);
			this.itemPriceList.addElement(new Integer(0));
		} catch (javax.naming.NamingException e) {
			throw new javax.ejb.EJBException(e);
		}
	}

	// コンポーネントインターフェイスのcreateWithSpecialPresents(int maxSize)メソッドに対応する
	public void ejbCreateWithSpecialPresents(int maxSize) {
		System.out.println("ShoppingCartBeanのejbCreateWithSpecialPresents(int maxSize)が呼ばれました");
		this.itemNameList = new Vector();
		this.itemPriceList = new Vector();
		this.maxSize = maxSize;

		try {
			// 環境エントリを使い特別プレゼント商品を取得する
			InitialContext ctx = new InitialContext();
			String val = (String) ctx.lookup("java:comp/env/specialPresent");
			this.itemNameList.addElement(val);
			this.itemPriceList.addElement(new Integer(0));
		} catch (javax.naming.NamingException e) {
			throw new javax.ejb.EJBException(e);
		}
	}

	public void add(String itemName, int itemPrice) throws MaxItemException {
		System.out.println("ShoppingCartBeanのaddが呼ばれました");

		if (itemNameList.size() >= maxSize)
			throw new MaxItemException("ショッピングカートの最大商品数に達しました");

		System.out.println("商品名=" + itemName + ", 価格=" + itemPrice);
		this.itemNameList.addElement(itemName);
		this.itemPriceList.addElement(new Integer(itemPrice));
	}

	public void ejbActivate() throws javax.ejb.EJBException, java.rmi.RemoteException {
		System.out.println("ShoppingCartBeanのejbActivateが呼ばれました");
	}

	public void ejbPassivate() throws javax.ejb.EJBException, java.rmi.RemoteException {
		System.out.println("ShoppingCartBeanのejbPassivateが呼ばれました");
	}

	public void ejbRemove() throws javax.ejb.EJBException, java.rmi.RemoteException {
		System.out.println("ShoppingCartBeanのejbRemoveが呼ばれました");
	}
}
